package 集合的综合案例_斗地主;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Room {
    // 首先要有一副牌(可以在无参构造器里创建一副牌放在集合里)
    // 因为要打乱顺序, 所以用ArrayList集合
    private List<Card> allCard = new ArrayList<>();

    public Room() {
        // 1. 创建54张 牌, 并存放到集合里去.
        // a. 点数
        String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        // b. 花色
        String[] colors = {"♠", "♥", "♣", "♦"};
        // c. 遍历点数, 再遍历花色, 组织牌
        int size = 0;// 表示每张牌的大小
        for (String number : numbers) {
            size++;
            for (String color : colors) {
                Card card = new Card(number,color,size);
                allCard.add(card);// 存入牌
            }
        }

        // 生成大小王
        Card king1 = new Card("","小🃏",++size);
        Card king2 = new Card("","大🃏",++size);
        Collections.addAll(allCard,king1,king2);
        System.out.println(allCard);
    }

    // 启动游戏
    public void start() {
        // 1. 洗牌
        Collections.shuffle(allCard);
        System.out.println(allCard);

        // 2. 发牌,
        // a. 创建三个玩家, List(ArrayList)集合
        List<Card> player1 = new ArrayList<>();
        List<Card> player2 = new ArrayList<>();
        List<Card> player3 = new ArrayList<>();
        // b. 正式发牌(以求余的方式发牌给三个玩家)
        for (int i = 0; i < allCard.size() - 3; i++) {
            Card c = allCard.get(i);
            // 判断该牌发给谁
            if (i % 3 == 0) {
                player1.add(c);
            } else if (i % 3 == 1) {
                player2.add(c);
            } else {
                player3.add(c);
            }
        }
        List<Card> lastCard = allCard.subList(allCard.size() - 3,allCard.size());// 这是一个官方List给的一个方法(用于截取一段数据放在另一个数组中,并返回这个数组)
        player1.sort((o1, o2) -> o1.getSize() - o2.getSize());
        player2.sort((o1, o2) -> o1.getSize() - o2.getSize());
        player3.sort((o1, o2) -> o1.getSize() - o2.getSize());
        System.out.println(player1);
        System.out.println(player2);
        System.out.println(player3);
        System.out.println(lastCard);
        // 3. 对玩家手中的牌 排序
        // 4. 看牌

    }

}
